#include<stdio.h>
#include<stdlib.h>
#include<memory.h>

int m=5,n=4;
int **A;


void f(int level,int offset)
{
    printf("level=%d offset=%d\n",level,offset);
    if(offset==4)
    {
        if(level==3)
        {
            int i;
            for(i=0;i<4;i++)
                if(A[4][i]>0)
                    break;
            if(i==4)
            {
                printf("success!");
                exit(0);
            }
            else
                return;
        }
        else
        {
            f(level+1,0);
        }
    }
    else
    {
        if(A[level][offset]==1)
        {
            f(level,offset+1);
        }
        else
        {
            A[level+1][offset]=1;
            f(level,offset+1);
            A[level+1][offset]=0;

            if(offset<3 && A[level][offset+1]==0)
            {
                f(level,offset+2);
            }
        }
    }
}

int main()
{
    int **B=malloc(sizeof((m+1)*sizeof(int*)));
    int i;
    for(i=0;i<n;i++)
    {
        B[i]=malloc(n*sizeof(int));
        memset(B[i],0,n*sizeof(int));
    }
    A=B;

    f(0,0);
}
